dojo.require('dijit._Widget');
dojo.require("dojo.NodeList-manipulate");
dojo.require("dojo.NodeList-traverse");

dojo.declare("mfSelectorsWidget", [dijit._Widget], {
		constructor: function(srcNodeRef,params){
				this._srcObj = dojo.isObject(srcNodeRef) ? params : dojo.byId(srcNodeRef);
				for (var p in params) {
					switch (p) {
						case 'defaultBoxClass':
							this._defaultBoxClass = params[p];
							break;
					}
				}
			},
		buildRendering: function() {
				
				var _this = this;
				
				// Присваеваем основному блоку класс темы оформления
				dojo.query(dojo.byId(this._srcObj))
						.addClass(this._defaultBoxClass)
					// Берем каждый чекбокс, создаем соответсвующий	элемент списка и сохраняем ссылки на них
					.query('input[type=checkbox]')
						.forEach(function (checkboxNode) {
								var labelText = dojo.trim(dojo.query(checkboxNode).parent()
									.addClass('mfswNoDisplay')
									.text());
								var listItem = dojo.create('li',{innerHTML: labelText});
								dojo.query(listItem)
									.connect('onclick',function () {
											dojo.query(listItem).toggleClass('mfswCheckedListItem');
										})
									.connect('onmouseenter',function () {
											dojo.query(listItem).toggleClass('mfswHoverededListItem');
										})
									.connect('onmouseleave',function () {
											dojo.query(listItem).toggleClass('mfswHoverededListItem');
										});
								_this._selectorItemList.push([checkboxNode,listItem]);
							});
				// Создаем блок со списокм возможных вариантов 
				_this._variantsBox = dojo.create('ul',{},
					dojo.create('div',{className: 'mfswVariantBox'},_this._srcObj));
				// Создание блока с кнопками управления
				var controlsBox = dojo.create('div',{className:'mfswControlsBox'},_this._srcObj);
				// Создается кнопка выбора всех значений
				dojo.connect(dojo.create('div',{className:'mfswControlBtn mfswControlSelectAllBtn'},controlsBox),
					'onclick',this,function () {
							for (var i in this._selectorItemList) {
								var checkboxLink = this._selectorItemList[i][0];
								var listItemLink = this._selectorItemList[i][1];
								if (!checkboxLink.checked) {
									dojo.query(listItemLink).removeClass('mfswCheckedListItem');
									checkboxLink.checked = true;
								}
							}
							this._rebuildLists();
						});
				dojo.connect(dojo.create('div',{className:'mfswControlBtn mfswControlSelectBtn'},controlsBox),
					'onclick',this,function () {
							for (var i in this._selectorItemList) {
								var checkboxLink = this._selectorItemList[i][0];
								var listItemLink = this._selectorItemList[i][1];
								if (!checkboxLink.checked && dojo.hasClass(listItemLink,'mfswCheckedListItem')) {
									dojo.query(listItemLink).removeClass('mfswCheckedListItem');
									checkboxLink.checked = true;
								}
							}
							this._rebuildLists();
						});
				dojo.connect(dojo.create('div',{className:'mfswControlBtn mfswControlAbortBtn'},controlsBox),
					'onclick',this,function () {
							for (var i in this._selectorItemList) {
								var checkboxLink = this._selectorItemList[i][0];
								var listItemLink = this._selectorItemList[i][1];
								if (checkboxLink.checked && dojo.hasClass(listItemLink,'mfswCheckedListItem')) {
									dojo.query(listItemLink).removeClass('mfswCheckedListItem');
									checkboxLink.checked = false;
								}
							}
							this._rebuildLists();
						});
				dojo.connect(dojo.create('div',{className:'mfswControlBtn mfswControlAbortAllBtn'},controlsBox),
					'onclick',this,function () {
							for (var i in this._selectorItemList) {
								var checkboxLink = this._selectorItemList[i][0];
								var listItemLink = this._selectorItemList[i][1];
								if (checkboxLink.checked) {
									dojo.query(listItemLink).removeClass('mfswCheckedListItem');
									checkboxLink.checked = false;
								}
							}
							this._rebuildLists();
						});
				dojo.query(_this._srcObj).query('.mfswControlsBox .mfswControlBtn')
					.connect('onmouseenter',function (e) {
							dojo.query(e.target).toggleClass('mfswControlBtnHover');
						})
					.connect('onmouseleave',function (e) {
							dojo.query(e.target).toggleClass('mfswControlBtnHover');
						})
					.connect('onmousedown',function (e) {
							dojo.query(e.target).toggleClass('mfswControlBtnActive');
						})
					.connect('onmouseup',function (e) {
							dojo.query(e.target).toggleClass('mfswControlBtnActive');
						});
				// Создаем блок со списокм выбранных вариантов
				_this._selectedBox = dojo.create('ul',{},
					dojo.create('div',{className: 'mfswVariantBox'},_this._srcObj));
				// Завершающий блок, чтобы убрать влияние float:left предыдущих элементов
				dojo.create('div',{className:'mfswAntifloat'},_this._srcObj);
				// Выводим по спискам все значения
				this._rebuildLists();
			},
		_selectorItemList: new Array(), // Здесь попарно хранятся ссылки на checkbox элементы и li элементы.
		_rebuildLists: function () { // Эта функция производит визуализацию выбранных елментов, т.е. выводит в списки
				for (var i in this._selectorItemList) {
					var checkboxLink = this._selectorItemList[i][0];
					var listItemLing = this._selectorItemList[i][1];
					dojo.place(listItemLing,!checkboxLink.checked ? this._variantsBox : this._selectedBox);
					//dojo.query('li:last-of-type').addClass('mfswLastListItem');
				}
			},
		_defaultBoxClass: 'mfSelectorWidget'
	});
			
